﻿#include "CStateManagerment.h"

/*
Tại một thời điểm, chỉ có 1 state được phép "hoạt động" (Update/Render)
Khi chuyển từ một state (A) sang một state khác (B), A phải được hủy (Exit) và B phải được tạo (Init) sau đó
Chỉ chuyển state (chuyển sang state khác) khi State cũ đã kết thúc việc update & render.
*/
namespace Framework
{
	void CStateManagerment::Update(bool isPause)
	{
		//Kiểm tra nếu cần chuyển state
		if (m_pCurrentState!=m_pNextState)
		{
			if (m_pCurrentState)
			{
				m_pCurrentState->Exit();
				delete m_pCurrentState;
			}
			if (m_pNextState)
			{
				m_pNextState->Init();
			}
			m_pCurrentState=m_pNextState;
		} 
		//Cập nhật state
		if (m_pCurrentState)
		{
			if (!isPause)
			{
				m_pCurrentState->Update();
			}
			m_pCurrentState->Render();
		}
	}
	void CStateManagerment::SwitchState(CState* nextState)
	{
		m_pNextState=nextState;
	}

}